package gimnasioSEF.interfaz.servlets;
import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet Abstracto principal con el template del diseno de la pagina
 */
@SuppressWarnings("serial")
public abstract class ServletTemplate extends HttpServlet
{

    // -----------------------------------------------------------------
    // Metodos
    // -----------------------------------------------------------------

    /**
     * Maneja un pedido GET de un cliente
     * @param request Pedido del cliente
     * @param response Respuesta
     */
    protected void doGet( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException
    {
        procesarPedido( request, response );
    }

    /**
     * Maneja un pedido POST de un cliente
     * @param request Pedido del cliente
     * @param response Respuesta
     */
    protected void doPost( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException
    {
        procesarPedido( request, response );
    }

    /**
     * Procesa el pedido de igual manera para todos
     * @param request Pedido del cliente
     * @param response Respuesta
     * @throws IOException Excepcion de error al escribir la respuesta
     */
    private void procesarPedido( HttpServletRequest request, HttpServletResponse response ) throws IOException
    {
        //
        // Comienza con el Header del template
        imprimirHeader( request, response );
        //
        // Escribe el contenido de la pagina
        escribirContenido( request, response );
        //
        // Temina con el footer del template
        imprimirFooter( response );

    }

    /**
     * Imprime el Header del diseno de la pagina
     * @param request Pedido del cliente
     * @param response Respuesta
     * @throws IOException Excepcion al imprimir en el resultado
     */
    private void imprimirHeader( HttpServletRequest request, HttpServletResponse response ) throws IOException
    {
        //
        // Saca el printer de la repsuesta
        PrintWriter respuesta = response.getWriter( );
        //
        // Imprime el header
        
       respuesta.write("<html> \r\n" );
       respuesta.write("	<head> \r\n" );
       respuesta.write("		<title>Gimnasio - Salud en Forma -</title> \r\n" );
       respuesta.write("		<link rel=\"stylesheet\" type=\"text/css\" media=\"screen\" href=\"styles.css\"  /> \r\n" );
       respuesta.write("		<script type=\"text/javascript\" src=\"javascript.js\"></script> \r\n" );
       respuesta.write(" 	</head> \r\n" );
       respuesta.write("<body> \r\n" );
       respuesta.write("  <div id=\"container\"> \r\n" );
       respuesta.write(" 	<div id=\"sidebarContainer\"> \r\n" );
       respuesta.write("		<div id=\"pageHeader\"> \r\n" );
       respuesta.write("			<h1>Gimnasio</h1> \r\n" );
       respuesta.write("			<h2>Salud en Forma</h2> \r\n" );
       respuesta.write("		</div> \r\n" );
       respuesta.write("		<div id=\"navcontainer\"> \r\n" );
       respuesta.write("		<ul><li><a href=\"index.html\" rel=\"self\" id=\"current\">Home</a></li><li><a href=\"RF1.htm\" rel=\"self\">RF1</a></li><li><a href=\"RF2.html\" rel=\"self\">RF2</a></li><li><a href=\"RF3.html\" rel=\"self\">RF3</a></li><li><a href=\"RF4.htm\" rel=\"self\">RF4</a></li><li><a href=\"RF5.htm\" rel=\"self\">RF5</a></li><li><a href=\"RF6.htm\" rel=\"self\">RF6</a></li><li><a href=\"RF7.html\" rel=\"self\">RF7</a></li><li><a href=\"RF8.html\" rel=\"self\">RF8</a></li><li><a href=\"RF9.html\" rel=\"self\">RF9</a></li><li><a href=\"RF10.html\" rel=\"self\">RF10</a></li><li><a href=\"RF11.html\" rel=\"self\">RF11</a></li><li><a href=\"RF12.html\" rel=\"self\">RF12</a></li><li><a href=\"RF13.html\" rel=\"self\">RF13</a></li><li><a href=\"RF14.html\" rel=\"self\">RF14</a></li><li><a href=\"RF15.html\" rel=\"self\">RF15</a></li><li><a href=\"RF16.htm\" rel=\"self\">RF16</a></li><li><a href=\"RF17.htm\" rel=\"self\">RF17</a></li><li><a href=\"RF18.htm\" rel=\"self\">RF18</a></li><li><a href=\"RF19.htm\" rel=\"self\">RF19</a></li><li><a href=\"RF20.htm\" rel=\"self\">RF20</a></li></ul> \r\n" );
       respuesta.write("		</div> \r\n" );
       respuesta.write("	</div> \r\n" );
       respuesta.write("	<div id=\"contentContainer\"> \r\n" );
       respuesta.write("		<div id=\"contentTop\">&nbsp;</div> \r\n" );
       respuesta.write("		<div id=\"content\"> \r\n" );
       
    }

    /**
     * Imrpime el Footer del diseno de la pagina
     * @param response Respuesta
     * @throws IOException Excepcion al escribir en la respuesta
     */
    private void imprimirFooter( HttpServletResponse response ) throws IOException
    {
        //
        // Saca el writer de la respuesta
        PrintWriter respuesta = response.getWriter( );
        //
        // Imprime el footer
        respuesta.write("</div> \r\n" );
        respuesta.write("<br style=\"clear: both;\"/> \r\n" );
        respuesta.write("<div id=\"contentBottom\">&nbsp;</div> \r\n" );
        respuesta.write("</div>\r\n" );
    	respuesta.write("</div>\r\n" );
    	respuesta.write("<br style=\"clear: both;\"/>\r\n" );
        respuesta.write("<div id=\"footer\"><p>&copy; 2010 - Universidad de los Andes - Conceptos Basicos de Bases de Datos - ivan.duarte/miller.saavedra <a href=\"#\" id=\"rw_email_contact\">Contacto</a><script type=\"text/javascript\">var _rwObsfuscatedHref0 =\"mai\";var _rwObsfuscatedHref1 =\"lto\";var _rwObsfuscatedHref2 =\":in\";var _rwObsfuscatedHref3 =\"ter\";var _rwObsfuscatedHref4 =\"clu\";var _rwObsfuscatedHref5 =\"b.g\";var _rwObsfuscatedHref6 =\"rou\";var _rwObsfuscatedHref7 =\"p@g\";var _rwObsfuscatedHref8 =\"mai\";var _rwObsfuscatedHref9 =\"l.c\";var _rwObsfuscatedHref10 =\"om\";var _rwObsfuscatedHref = _rwObsfuscatedHref0+_rwObsfuscatedHref1+_rwObsfuscatedHref2+_rwObsfuscatedHref3+_rwObsfuscatedHref4+_rwObsfuscatedHref5+_rwObsfuscatedHref6+_rwObsfuscatedHref7+_rwObsfuscatedHref8+_rwObsfuscatedHref9+_rwObsfuscatedHref10; document.getElementById('rw_email_contact').href = _rwObsfuscatedHref;</script></p></div>\r\n" );
        respuesta.write("</body> \r\n" );
        respuesta.write("</html> \r\n" );

    }


    /**
     * Imrpime un mensaje de error
     * @param respuesta Respuesta al cliente
     * @param titulo Titulo del error
     * @param exception Excepcion de error
     * @param mensaje Mensaje del error
     */
    protected void imprimirMensajeError( HttpServletResponse response, String titulo, String mensaje, Exception exception )
    {
        PrintWriter respuesta;
        try
        {
    	respuesta = response.getWriter( );
        respuesta.write( "                      <p class=\"error\"><b>Ha ocurrido un error!:<br>\r\n" );
        respuesta.write( "                      </b>" + titulo + "</p><p>" + mensaje + ". Mas Informacion:<br>" );
        exception.printStackTrace( respuesta );
        respuesta.write( "</p>\r\n" );
        respuesta.write( "                      <p>Intente la \r\n" );
        respuesta.write( "                      operacion nuevamente. Si el problema persiste, contacte \r\n" );
        respuesta.write( "                      al administrador del sistema.</p>\r\n" );
        respuesta.write( "                      <p><a href=\"index.html\">Volver a la pagina principal</a>\r\n" );
        }
        catch( IOException e )
        {
            e.printStackTrace( );
        }
    }

    /**
     * Imprime un mensaje de exito
     * @param respuesta Respuesta al cliente
     * @param titulo Titulo del mensaje
     * @param mensaje Contenido del mensaje
     */
    protected void imprimirMensajeOk( PrintWriter respuesta, String titulo, String mensaje )
    {
        respuesta.write( "                      <p class=\"ok\"><b>Operacion exitosa:<br>\r\n" );
        respuesta.write( "                      </b>" + titulo + "</p><p>" + mensaje + ". </p>\r\n" );
        respuesta.write( "                      <p><a href=\"index.html\">Volver a la pagina principal</a>\r\n" );
    }

    // -----------------------------------------------------------------
    // Metodos Abstractos
    // -----------------------------------------------------------------

    /**
     * Devuelve el titulo de la pagina para el Header
     * @param request Pedido del cliente
     * @return Titulo de la pagina para el Header
     */
    public abstract String darTituloPagina( HttpServletRequest request );

    
    /**
     * Escribe el contendio de la pagina
     * @param request Pedido del cliente
     * @param response Respuesta
     * @throws IOException Excepcion de error al escribir la respuesta
     */
    public abstract void escribirContenido( HttpServletRequest request, HttpServletResponse response ) throws IOException;

    
    
}
